var loginAction = (function (doc) {
  // 模态框 盒子
  var oModal = doc.getElementsByClassName('js_modal')[0],
    //form表单提交地址
    submitURL = doc.getElementById('js_loginForm').action,
    // 用户名输入框
    oUserName = doc.getElementById('js_username'),
    // 密码输入框
    oPassword = doc.getElementById('js_password'),
    // 保持登录复选框
    oPersistedLogin = doc.getElementById('js_persistedLogin'),
    // 错误提示信息
    oErrorTip = doc.getElementsByClassName('js_errorTip')[0],
    //登录状态 头部区域
    oLoginStatus = doc.getElementsByClassName('js_loginStatus')[0],

    //登录 模板
    loginTpl = doc.getElementById('js_loginTpl').innerHTML,
    //登录成功 用户信息模板
    userTpl = doc.getElementById('js_userTpl').innerHTML;

  return {
    //定义事件处理函数
    openLoginBoard: function (show) {
      if (show) {
        //显示模态框
        oModal.className += ' show';
      } else {
        //隐藏模态框
        oModal.className = 'modal-container js_modal';
      }
    },
    //检查合法性
    login: function (e) {
      //阻止自动跳转默认事件
      var e = e || window.event;
      e.preventDefault();

      var username = trimSpace(oUserName.value),
        password = trimSpace(oPassword.value);

      //输入框合法性判断
      if (username.length < 6 || username.length > 20) {
        oErrorTip.innerText = '用户名长度：6-20位';
        return;
      }

      if (password.length < 6 || password.length > 20) {
        oErrorTip.innerText = '密码长度：6-20位';
        return;
      }

      //执行提交表单信息函数
      this.submitForm(username, password, oPersistedLogin.checked);
    },
    /**
     * 提交表单信息函数
     * @param {string} username 用户名
     * @param {*} password 密码
     * @param {boolean} isPersisedLogin 是否保持30天
     */
    submitForm: function (username, password, isPersisedLogin) {
      //发起数据请求
      xhr.ajax({
        url: submitURL,
        type: 'POST',
        dataType: 'JSON',
        data: {
          username: username,
          password: password,
          isPersisedLogin: isPersisedLogin
        },
        success: function (data) {
          /**
           * 服务器响应的数据格式
           * data = {
           *   error_code: '1001',
           *   error_msg: 'Invalid username length'
           * }
           */
          var code = data.error_code,
            errorInfo = '';

          //根据服务器响应的错误代号编写错误信息
          switch (code) {
            case '1001':
              errorInfo = '用户名长度不正确';
              break;
            case '1002':
              errorInfo = '密码长度不正确';
              break;
            case '1003':
              errorInfo = '此用户名不存在';
              break;
            case '1004':
              errorInfo = '密码不正确';
              break;
            case '1005':
              errorInfo = '登录失败，请重试';
              break;
            case '200':
              location.reload();
              break;
            default:
              break;
          }
          oErrorTip.innerHTML = errorInfo;
        }
      })
    },
    //确认auth信息是否存在且是否合法
    checkAuth: function () {
      var _self = this;
      //获取cookie里的auth信息
      manageCookies.get('auth', function (cookie) {
        //当cookie存在时对比cookie的时效性与合法性
        if (cookie != undefined) {
          xhr.ajax({
            url: 'http://localhost/api_for_study/User/checkAuth',
            type: 'POST',
            dataType: 'JSON',
            data: {
              auth: cookie
            },
            success: function (data) {
              var code = data.error_code,
                errorInfo = '';

              switch (code) {
                case '1006':
                  errorInfo = '登录验证不通过，请重试';
                  //自动打开模态框
                  _self.openLoginBoard(true);
                  _self.render(false);
                  break;
                case '1007':
                  errorInfo = '登录已过期，请重试';
                  _self.openLoginBoard(true);
                  _self.render(false);
                  break;
                case '200':
                  //登录成功，验证通过
                  _self.render(true);
                  break;
                default:
                  break;
              }
            }
          })
        }
      })
    },
    //渲染用户登录成功后信息dom模板结构
    //根据传入的值渲染失败/成功的模板
    render: function (isLogin) {
      if (isLogin) {
        //拿出用户昵称
        //渲染登录成功后 用户信息模板
        manageCookies.get('nickname', function (cookie) {
          oLoginStatus.innerHTML = userTpl.replace(/{{(.*?)}}/g, cookie);
        });
      } else {
        //默认请登录 模板
        oLoginStatus.innerHTML = loginTpl;
      }
    }
  }
})(document);

;
(function (doc) {
  //登录打开模态框按钮
  var oOpenBtn = doc.getElementsByClassName('js_openBtn')[0],
    //关闭按钮
    oCloseBtn = doc.getElementsByClassName('js_closeBtn')[0],
    //登录按钮
    oLoginBtn = doc.getElementsByClassName('js_loginBtn')[0];

  var init = function () {
    //页面加载查看是否存在auth信息
    loginAction.checkAuth.call(loginAction);
    bindEvent();
  }

  function bindEvent() {
    // 单击 登录 触发模态框
    oOpenBtn.addEventListener('click', loginAction.openLoginBoard.bind(null, true), false);
    // 单击 模态框 关闭触发
    oCloseBtn.addEventListener('click', loginAction.openLoginBoard.bind(null, false), false);
    // 单击 登录按钮 触发登录合法性程序
    oLoginBtn.addEventListener('click', loginAction.login.bind(loginAction), false);

  }

  init();
})(document);